menubutton: Fix possible button/popover state inconsistences
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 20 Feb 2015 12:33:09 +0000 (13:33 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 20 Feb 2015 13:44:17 +0000 (14:44 +0100)
While a popover is hiding, the modal grab is already gone and the toggle
button is clickable again, but clicking again at that time will result in
gtk_widget_show() trying to show an already shown widget (although fading
out and hidden soon) and the toggle button activated.

So let the menubutton set the active status only if the menu/popover
widget wasn't already shown, and ensure this doesn't get triggered by
double/triple button press events.

gtk/gtkmenubutton.c

index 422c07fb99f569bd7e286261d166d111290b5541..de06bf1a2e750463acffdf54e02ab27d83891035 100644 (file)
@@ -442,10 +442,16 @@ gtk_menu_button_button_press_event (GtkWidget      *widget,
 
   if (event->button == GDK_BUTTON_PRIMARY)
     {
-      if (priv->menu)
+      /* Filter out double/triple clicks */
+      if (event->type != GDK_BUTTON_PRESS)
+        return TRUE;
+
+      if (priv->menu && !gtk_widget_get_visible (priv->menu))
         popup_menu (menu_button, event);
-      else if (priv->popover)
+      else if (priv->popover && !gtk_widget_get_visible (priv->popover))
         gtk_widget_show (priv->popover);
+      else
+        return TRUE;
 
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);